#include "planner.h"

/*

*/

// gpio Planner::gpio_mask[GPIO_MASK_CACHE];

// dedic_gpio_bundle_handle_t Planner::sensor_bundle = NULL;

// 储存GPIO mask表
/*
void Planner::set_gpio_mask(uint8_t name, uint32_t mask)
{
    static uint8_t is_allot = 0;
    if (is_allot < GPIO_MASK_CACHE)
    {
        gpio_mask[is_allot].GPIO = name;
        gpio_mask[is_allot].mask = mask;
        is_allot++;
    }
}
*/

// 获取GPIO mask
/*
uint32_t Planner::get_gpio_mask(uint8_t _gpio)
{
    uint32_t mask;
    dedic_gpio_bundle_handle_t _bundle;
    const int gpio = _gpio;
    const dedic_gpio_bundle_config_t _bundle_config = {
        &gpio,
        1,
        {1,
         0,
         1,
         0}};
    dedic_gpio_new_bundle(&_bundle_config, &_bundle);
    dedic_gpio_get_in_mask(_bundle, &mask);
    return mask;
}
*/
void Planner::init_gpio()
{
    const uint8_t size = planner.get_gpio_num();

    uint64_t count = 0;
    while (size > count)
    {
        gpio_reset_pin(sensor_gpio[count]);
        // GPIO Config
        gpio_config_t gpio_confg = {
            (uint64_t)sensor_gpio[count],
            GPIO_MODE_INPUT_OUTPUT,
            GPIO_PULLUP_ENABLE,
            GPIO_PULLDOWN_DISABLE,
            GPIO_INTR_DISABLE};

        gpio_config(&gpio_confg);
        gpio_set_direction(sensor_gpio[count], GPIO_MODE_INPUT_OUTPUT);
        gpio_set_pull_mode(sensor_gpio[count], GPIO_PULLUP_ONLY);
        gpio_pullup_en(sensor_gpio[count]);
        gpio_set_level(sensor_gpio[count], 1);

        // set_gpio_mask(sensor_gpio[count], get_gpio_mask(sensor_gpio[count]));
        count++;
        //vTaskDelay(1);
    }
    { // 额外设置
        gpio_set_level(sensor_gpio[TEST_LED], 1);
    }
}

// Bundle GPIO 设置GPIO捆绑 [专用GPIO]
/*
void Planner::GPIO_bundle_init()
{
    gpio_config_t sensor_config = {
        .mode = GPIO_MODE_INPUT};

    const uint8_t size = GPIO_MASK_CACHE;
    uint8_t count = 0;
    while (size > count)
    {
        sensor_config.pin_bit_mask = 1UL << sensor_gpio[count];
        gpio_config(&sensor_config);
    }

    // Create

    dedic_gpio_bundle_config_t sensor_bundle_cfg = {
        .gpio_array = sensor_gpio,
        .array_size = sizeof(sensor_gpio) / sizeof(sensor_gpio[0]),
        .flags = {
            .in_en = 1,
        },
    };
    ESP_ERROR_CHECK(dedic_gpio_new_bundle(&sensor_bundle_cfg, &sensor_bundle));
}
*/